package com.game.framework.spring.jdbctemplate;

import java.io.Serializable;
import java.util.List;

/**
 * BaseJdbcTemplateDAO
 * @author Liyuan
 */

public interface BaseJdbcTemplateDAO<Entity, ID extends Serializable> {
	
	/**
	 * execute
	 * @param sql
	 * @param args
	 * @return
	 */
	public int execute(String sql, Object... args);
	
	/**
	 * execute
	 * @param sql
	 * @param entity
	 * @return
	 */
	public int execute(String sql, Entity entity);
	
	/**
	 * save
	 * @param entity
	 * @param tableName
	 * @param pkColumnName
	 * @return
	 */
	public Number save(Entity entity, String tableName, String pkColumnName);
	
	/**
	 * add
	 * @param sql
	 * @param entity
	 * @return
	 */
	public int add(String sql, Entity entity);
	
	/**
	 * add
	 * @param sql
	 * @param args
	 * @return
	 */
	public int add(String sql, Object... args);
	
	/**
	 * update
	 * @param sql
	 * @param entity
	 * @return
	 */
	public int update(String sql, Entity entity);
	
	/**
	 * update
	 * @param sql
	 * @param args
	 * @return
	 */
	public int update(String sql, Object... args);
	
	/**
	 * truncate
	 * @param tableName
	 */
	public void truncate(String tableName);
	
	/**
	 * delete
	 * @param sql
	 * @param entity
	 * @return
	 */
	public int delete(String sql, Entity entity);
	
	/**
	 * delete
	 * @param sql
	 * @param args
	 * @return
	 */
	public int delete(String sql, Object... args);
	
	/**
	 * count
	 * @param sql
	 * @param args
	 * @return
	 */
	public long count(String sql, Object... args);
	
	/**
	 * get
	 * @param sql
	 * @param args
	 * @return
	 */
	public Entity get(String sql, Object... args);
	
	/**
	 * find
	 * @param sql
	 * @param args
	 * @return
	 */
	public List<Entity> find(String sql, Object... args);
	
}
